package com.neusoft.neuhealth.service;

import com.neusoft.neuhealth.po.caregiver.params.PurchasedItemsRequest;
import com.neusoft.neuhealth.po.caregiver.results.PurchasedItemsListResult;
import com.neusoft.neuhealth.po.Result;
import com.neusoft.neuhealth.po.customer.customerparams.*;
import com.neusoft.neuhealth.po.customer.customerresult.*;

import java.util.List;
import java.util.Map;

public interface ICustomerService {
    Result<CustomerListResult> list(CustomerListRequest request);

    Result register(CustomerRegisterParam param);

    Result update(Long id, CustomerRegisterParam param);

    Result delete(Long id);

    Result deleteBed(Long id, Long bedNumber);

    Result<CustomerCheckOutListResult> checkoutList(CustomerListRequest request);

    Result approveCheckout(Long id, Map<String, Object> params,String token);

    Result<CustomerOutingListResult> outingList(CustomerListRequest request);

    Result approveOuting(Long id, Map<String, Object> params, String token);

    Result<CustomerNoCaregiverListResult> listnoCaregiver(CustomerListRequest request);

    Result<PurchasedItemsListResult> purchasedItems(PurchasedItemsRequest request);

    Result isPurchased(Long customerId, Long itemId);

    Result<Map<String, Boolean>> buyItems(List<BuyItemRequest> requests);

    Result<CustomerNoCaregiverListResult> listMyCustomers(CustomerListRequest request, String token);

    Result outingApply(OutingParam param, String token);

    Result<MyApplicationsResults> listmyApplications(CustomerListRequest request, String token);

    Result returnOuting(Long id, String actualReturnDate);

    Result cancelOuting(Long id);

    Result checkApply(CheckoutParam param, String token);

    Result cancelCheckout(Long id);

    Result<MyCheckoutApplicationsResults> listmyCheckoutApplications(CustomerListRequest request, String token);

    Result<Long> count();

    Result<Long> monthCount(String date);

    Result<List<Long>> yearCount(String year);
}
